package com.it;


import java.util.List;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.CanalEventListener;
import com.xpand.starter.canal.annotation.DeleteListenPoint;
import com.xpand.starter.canal.annotation.InsertListenPoint;
import com.xpand.starter.canal.annotation.ListenPoint;
import com.xpand.starter.canal.annotation.UpdateListenPoint;

@CanalEventListener
public class CanalDataEventListener {
    
    //@InsertListenPoint注解：当mysql数据库中添加数据时被触发
//CanalEntry.RowData rowData参数： mysql数据库中被修改的数据
    @InsertListenPoint
    public void onEvent(CanalEntry.RowData rowData) {
           
    	 func(rowData);
    }
  
    //@UpdateListenPoint注解：当mysql数据库中更新数据时被触发
     @UpdateListenPoint
    public void onEvent1(CanalEntry.RowData rowData) {
    
    	 func(rowData);
    }
     
   //@DeleteListenPoint注解：当mysql数据库中删除数据时被触发
     @DeleteListenPoint
    public void onEvent3( CanalEntry.RowData rowData) {
    	    func(rowData);
                
    }
     
     public  void  func(CanalEntry.RowData rowData) {
    	  //获取被修改后的数据
  List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();
          for (CanalEntry.Column column : afterColumnsList) {
              System.out.println(column.getName()+":"+column.getValue());
          }
     }

//自定义事件的触发
// destination = "example" 指定某一个目的地 一定要和canal配置文件中的目录保持一致
//schema = "csxContent" 表示要监听csxContent数据库
//table = {"t_user", "test_table"},   要监听的数据库表
// eventType  表示要监听的类型
    @ListenPoint(destination = "example", schema = "csxContent", table = {"tb_content"}, eventType = {CanalEntry.EventType.UPDATE,CanalEntry.EventType.INSERT,CanalEntry.EventType.DELETE})
    // CanalEntry.EventType eventType 参数： 监听到的对mysql操作的类型  INSERT  UPDATE ,DELETE ,CREATE INDEX ,GRAND
    // CanalEntry.RowData rowData参数： mysql数据库中被修改的数据
    public void onEvent4(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        
    	        if(CanalEntry.EventType.DELETE == eventType) {
    	        	System.out.println("数据库执行了删除操作");
    	        }else if(CanalEntry.EventType.UPDATE==eventType) {
    	        	System.out.println("数据库执行了更新操作");
    	        }else if(CanalEntry.EventType.INSERT==eventType) {
    	        	System.out.println("数据库执行了插入操作");
    	        }
    	        
    	        func(rowData);
    }
}
